package com.demo.java.OD101_150.OD131;

import java.util.Scanner;

/**
 * @author bug菌
 * @Source 公众号：猿圈奇妙屋
 * @des： 【任务调度】问题
 * @url： https://blog.csdn.net/weixin_43970743/article/details/145725487
 */
public class OdMain {
    public static void main(String[] args) {
        try {
            Scanner scan = new Scanner(System.in);

            // 读取任务数量和可用GPU数量
            int taskNum = scan.nextInt();
            if (taskNum < 1 || taskNum > 10000) {
                System.out.println("input error");
                return;
            }

            // 读取任务数组的长度
            int arrayLength = scan.nextInt();
            if (arrayLength < 1 || arrayLength > 10000) {
                System.out.println("input error");
                return;
            }

            // 读取任务时间
            int[] taskArray = new int[arrayLength];
            for (int i = 0; i < arrayLength; ++i) {
                taskArray[i] = scan.nextInt();
                if (taskArray[i] < 1 || taskArray[i] > 10000) {
                    System.out.println("input error");
                    return;
                }
            }

            // 模拟任务执行时间
            int needTime = 0, leave = 0;
            for (int count : taskArray) {
                // 如果当前任务所需时间和剩余时间大于GPU处理能力，则更新剩余时间
                if (taskNum < count + leave) {
                    leave = count + leave - taskNum;
                } else {
                    leave = 0;
                }
                ++needTime;
            }

            // 计算需要的时间，考虑剩余时间是否足够
            needTime += leave / taskNum;
            if (0 < leave % taskNum) {
                ++needTime;
            }

            System.out.println(needTime);  // 输出最终任务完成所需的时间
        } catch (Exception e) {
            e.printStackTrace();
            System.out.println("input error");
        }
    }
}